/*!
 * # 参数列表实体类:
 *  Add - 添加新用户
 * 
 * # 描述:
 *  添加一个新的用户账号。
 *  
 *  Copyright (c), 上海沃恩信息科技有限公司.
 *  All rights reserved.
 *  Licensed under BSD (https://www.pittypat.work/bsd.html).
 */

using Pittypat;

namespace Waln.Authority.Users.Args
{
	/// <summary>
	/// 功能 添加新用户 的参数列表。
	/// </summary>
	[global::Pittypat.Function(Transaction = true)]
	public sealed class Add : global::Pittypat.FunctionArgs
	{
		#region 构造函数

		/// <summary>
		/// 初始化 Add 类的一个新实例。
		/// </summary>
		public Add()
		{
			// 用户 Id
			this.UserId = null;
			// 登录名称
			this.LoginName = null;
			// 登录密码明文
			this.Password = null;
			// 编号
			this.No = null;
			// 用户名称
			this.Name = null;
			// 手机号码
			this.Mobile = null;
			// 电子邮件地址
			this.Email = null;
			// 登录后首页
			this.LoginHomeUrl = null;
			// 登录后首页说明
			this.LoginHomeDescription = null;
			// 新用户
			this.User = null;
		}

		#endregion

		#region 属性

		/// <summary>
		/// 获取或者设置用户 Id。
		/// </summary>
		/// <remarks>
		/// 当前用户的 Id，由系统自动设置该参数。
		/// </remarks>
		[global::Pittypat.Parameter(0, Role = global::Pittypat.ParameterRole.UserId)]
		public @uuid? UserId { get; set; }

		/// <summary>
		/// 获取或者设置登录名称。
		/// </summary>
		/// <remarks>
		/// 用户的登录名称。
		/// </remarks>
		[global::Pittypat.Parameter(1, MaxLength = 50)]
		public @string? LoginName { get; set; }

		/// <summary>
		/// 获取或者设置登录密码明文。
		/// </summary>
		/// <remarks>
		/// 用户登录密码的明文。
		/// </remarks>
		[global::Pittypat.Parameter(2, FixedLength = true, MaxLength = 30)]
		public @string? Password { get; set; }

		/// <summary>
		/// 获取或者设置编号。
		/// </summary>
		/// <remarks>
		/// 用户的编号，编号是唯一的，比如工号。登录时可以使用编号登录。
		/// </remarks>
		[global::Pittypat.Parameter(3, MaxLength = 20)]
		public @string? No { get; set; }

		/// <summary>
		/// 获取或者设置用户名称。
		/// </summary>
		/// <remarks>
		/// 用户的友好显示名称。
		/// </remarks>
		[global::Pittypat.Parameter(4, MaxLength = 50)]
		public @string? Name { get; set; }

		/// <summary>
		/// 获取或者设置手机号码。
		/// </summary>
		/// <remarks>
		/// 用户的手机号码，如果提供了手机号码，必须是唯一的。
		/// </remarks>
		[global::Pittypat.Parameter(5, MaxLength = 20)]
		public @string? Mobile { get; set; }

		/// <summary>
		/// 获取或者设置电子邮件地址。
		/// </summary>
		/// <remarks>
		/// 用户的电子邮件地址。如果提供了电子邮件地址，则必须是唯一的。
		/// </remarks>
		[global::Pittypat.Parameter(6, MaxLength = 50)]
		public @string? Email { get; set; }

		/// <summary>
		/// 获取或者设置登录后首页。
		/// </summary>
		/// <remarks>
		/// 用户在登录后进入的页面，由用户自己配置。支持 '~' 作为前缀的路径格式。
		/// </remarks>
		[global::Pittypat.Parameter(7, MaxLength = 200)]
		public @string? LoginHomeUrl { get; set; }

		/// <summary>
		/// 获取或者设置登录后首页说明。
		/// </summary>
		/// <remarks>
		/// 对用户登录后首先进入的页面的说明信息。
		/// </remarks>
		[global::Pittypat.Parameter(8, MaxLength = 100)]
		public @string? LoginHomeDescription { get; set; }

		/// <summary>
		/// 获取或者设置新用户。
		/// </summary>
		/// <remarks>
		/// 如果添加成功，返回新用户的用户信息。
		/// </remarks>
		[global::Pittypat.Parameter(9, Direction = global::Pittypat.ParameterDirection.Out)]
		public global::Waln.Authority.Users.Data.User User { get; set; }

		/// <summary>
		/// 获取或者设置指定名称的参数值。
		/// </summary>
		/// <param name="name">参数名称，不区分大小写。</param>
		/// <returns>目标名称的参数值。如果参数不存在，则返回 null。</returns>
		/// <exception cref="global::System.ArgumentException">设置参数值时发现参数不存在。</exception>
		public override object this[string name]
		{
			get
			{
				if (string.IsNullOrEmpty(name))
				{
					return null;
				}

				switch (name.ToLower())
				{
					case "userid":
						return this.UserId;
					case "loginname":
						return this.LoginName;
					case "password":
						return this.Password;
					case "no":
						return this.No;
					case "name":
						return this.Name;
					case "mobile":
						return this.Mobile;
					case "email":
						return this.Email;
					case "loginhomeurl":
						return this.LoginHomeUrl;
					case "loginhomedescription":
						return this.LoginHomeDescription;
					case "user":
						return this.User;
					default:
						return null;
				}
			}
			set
			{
				if (string.IsNullOrEmpty(name))
				{
					throw new global::System.ArgumentException("没有提供有效的参数名称。", "name");
				}

				switch (name.ToLower())
				{
					case "userid":
						this.UserId = (@uuid?)value;
						break;
					case "loginname":
						this.LoginName = (@string?)value;
						break;
					case "password":
						this.Password = (@string?)value;
						break;
					case "no":
						this.No = (@string?)value;
						break;
					case "name":
						this.Name = (@string?)value;
						break;
					case "mobile":
						this.Mobile = (@string?)value;
						break;
					case "email":
						this.Email = (@string?)value;
						break;
					case "loginhomeurl":
						this.LoginHomeUrl = (@string?)value;
						break;
					case "loginhomedescription":
						this.LoginHomeDescription = (@string?)value;
						break;
					case "user":
						this.User = (global::Waln.Authority.Users.Data.User)value;
						break;
					default:
						throw new global::System.ArgumentException(name + " 不是 " + this.GetType().Name + " 的有效参数名称。", "name");
				}
			}
		}

		#endregion

		#region 方法

		/// <summary>
		/// 将当前对象作为 JSON 字符串写入指定的文本流。
		/// </summary>
		/// <param name="writer">目标文本流。</param>
		/// <exception cref="global::System.ArgumentNullException">writer 是 null。</exception>
		public override void Write(global::System.IO.TextWriter writer)
		{
			if (writer == null)
			{
				throw new global::System.ArgumentNullException("writer");
			}

			writer.Write('{');

			// 用户 Id
			writer.Write("\"userId\":");
			this.UserId.Write(writer);
			writer.Write(',');

			// 登录名称
			writer.Write("\"loginName\":");
			this.LoginName.Write(writer);
			writer.Write(',');

			// 登录密码明文
			writer.Write("\"password\":");
			this.Password.Write(writer);
			writer.Write(',');

			// 编号
			writer.Write("\"no\":");
			this.No.Write(writer);
			writer.Write(',');

			// 用户名称
			writer.Write("\"name\":");
			this.Name.Write(writer);
			writer.Write(',');

			// 手机号码
			writer.Write("\"mobile\":");
			this.Mobile.Write(writer);
			writer.Write(',');

			// 电子邮件地址
			writer.Write("\"email\":");
			this.Email.Write(writer);
			writer.Write(',');

			// 登录后首页
			writer.Write("\"loginHomeUrl\":");
			this.LoginHomeUrl.Write(writer);
			writer.Write(',');

			// 登录后首页说明
			writer.Write("\"loginHomeDescription\":");
			this.LoginHomeDescription.Write(writer);
			writer.Write(',');

			// 新用户
			writer.Write("\"user\":");
			if (this.User == null)
			{
				writer.Write("null");
			}
			else
			{
				this.User.Write(writer);
			}

			writer.Write('}');
		}

		#endregion
	}
}
